// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file sensor_combined.h
 * This header file contains the declaration of the described types in the IDL file.
 *
 * This file was generated by the tool gen.
 */

#ifndef _SENSOR_COMBINED_H_
#define _SENSOR_COMBINED_H_

// TODO Poner en el contexto.

#include <stdint.h>
#include <array>
#include <string>
#include <vector>
#include <map>
#include <bitset>

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec( dllexport )
#else
#define eProsima_user_DllExport
#endif
#else
#define eProsima_user_DllExport
#endif

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(sensor_combined_SOURCE)
#define sensor_combined_DllAPI __declspec( dllexport )
#else
#define sensor_combined_DllAPI __declspec( dllimport )
#endif // sensor_combined_SOURCE
#else
#define sensor_combined_DllAPI
#endif
#else
#define sensor_combined_DllAPI
#endif // _WIN32

namespace eprosima
{
    namespace fastcdr
    {
        class Cdr;
    }
}


const int32_t sensor_combined__RELATIVE_TIMESTAMP_INVALID = 2147483647;
const uint8_t sensor_combined__CLIPPING_X = 1;
const uint8_t sensor_combined__CLIPPING_Y = 2;
const uint8_t sensor_combined__CLIPPING_Z = 4;
typedef std::array<float, 3> sensor_combined__float_array_3;
/*!
 * @brief This class represents the structure sensor_combined defined by the user in the IDL file.
 * @ingroup SENSOR_COMBINED
 */
class sensor_combined
{
public:

    /*!
     * @brief Default constructor.
     */
    eProsima_user_DllExport sensor_combined();

    /*!
     * @brief Default destructor.
     */
    eProsima_user_DllExport ~sensor_combined();

    /*!
     * @brief Copy constructor.
     * @param x Reference to the object sensor_combined that will be copied.
     */
    eProsima_user_DllExport sensor_combined(const sensor_combined &x);

    /*!
     * @brief Move constructor.
     * @param x Reference to the object sensor_combined that will be copied.
     */
    eProsima_user_DllExport sensor_combined(sensor_combined &&x);

    /*!
     * @brief Copy assignment.
     * @param x Reference to the object sensor_combined that will be copied.
     */
    eProsima_user_DllExport sensor_combined& operator=(const sensor_combined &x);

    /*!
     * @brief Move assignment.
     * @param x Reference to the object sensor_combined that will be copied.
     */
    eProsima_user_DllExport sensor_combined& operator=(sensor_combined &&x);

    /*!
     * @brief This function sets a value in member timestamp_
     * @param _timestamp_ New value for member timestamp_
     */
    eProsima_user_DllExport void timestamp_(uint64_t _timestamp_);

    /*!
     * @brief This function returns the value of member timestamp_
     * @return Value of member timestamp_
     */
    eProsima_user_DllExport uint64_t timestamp_() const;

    /*!
     * @brief This function returns a reference to member timestamp_
     * @return Reference to member timestamp_
     */
    eProsima_user_DllExport uint64_t& timestamp_();

    /*!
     * @brief This function copies the value in member gyro_rad
     * @param _gyro_rad New value to be copied in member gyro_rad
     */
    eProsima_user_DllExport void gyro_rad(const sensor_combined__float_array_3 &_gyro_rad);

    /*!
     * @brief This function moves the value in member gyro_rad
     * @param _gyro_rad New value to be moved in member gyro_rad
     */
    eProsima_user_DllExport void gyro_rad(sensor_combined__float_array_3 &&_gyro_rad);

    /*!
     * @brief This function returns a constant reference to member gyro_rad
     * @return Constant reference to member gyro_rad
     */
    eProsima_user_DllExport const sensor_combined__float_array_3& gyro_rad() const;

    /*!
     * @brief This function returns a reference to member gyro_rad
     * @return Reference to member gyro_rad
     */
    eProsima_user_DllExport sensor_combined__float_array_3& gyro_rad();
    /*!
     * @brief This function sets a value in member gyro_integral_dt_
     * @param _gyro_integral_dt_ New value for member gyro_integral_dt_
     */
    eProsima_user_DllExport void gyro_integral_dt_(uint32_t _gyro_integral_dt_);

    /*!
     * @brief This function returns the value of member gyro_integral_dt_
     * @return Value of member gyro_integral_dt_
     */
    eProsima_user_DllExport uint32_t gyro_integral_dt_() const;

    /*!
     * @brief This function returns a reference to member gyro_integral_dt_
     * @return Reference to member gyro_integral_dt_
     */
    eProsima_user_DllExport uint32_t& gyro_integral_dt_();

    /*!
     * @brief This function sets a value in member accelerometer_timestamp_relative_
     * @param _accelerometer_timestamp_relative_ New value for member accelerometer_timestamp_relative_
     */
    eProsima_user_DllExport void accelerometer_timestamp_relative_(int32_t _accelerometer_timestamp_relative_);

    /*!
     * @brief This function returns the value of member accelerometer_timestamp_relative_
     * @return Value of member accelerometer_timestamp_relative_
     */
    eProsima_user_DllExport int32_t accelerometer_timestamp_relative_() const;

    /*!
     * @brief This function returns a reference to member accelerometer_timestamp_relative_
     * @return Reference to member accelerometer_timestamp_relative_
     */
    eProsima_user_DllExport int32_t& accelerometer_timestamp_relative_();

    /*!
     * @brief This function copies the value in member accelerometer_m_s2
     * @param _accelerometer_m_s2 New value to be copied in member accelerometer_m_s2
     */
    eProsima_user_DllExport void accelerometer_m_s2(const sensor_combined__float_array_3 &_accelerometer_m_s2);

    /*!
     * @brief This function moves the value in member accelerometer_m_s2
     * @param _accelerometer_m_s2 New value to be moved in member accelerometer_m_s2
     */
    eProsima_user_DllExport void accelerometer_m_s2(sensor_combined__float_array_3 &&_accelerometer_m_s2);

    /*!
     * @brief This function returns a constant reference to member accelerometer_m_s2
     * @return Constant reference to member accelerometer_m_s2
     */
    eProsima_user_DllExport const sensor_combined__float_array_3& accelerometer_m_s2() const;

    /*!
     * @brief This function returns a reference to member accelerometer_m_s2
     * @return Reference to member accelerometer_m_s2
     */
    eProsima_user_DllExport sensor_combined__float_array_3& accelerometer_m_s2();
    /*!
     * @brief This function sets a value in member accelerometer_integral_dt_
     * @param _accelerometer_integral_dt_ New value for member accelerometer_integral_dt_
     */
    eProsima_user_DllExport void accelerometer_integral_dt_(uint32_t _accelerometer_integral_dt_);

    /*!
     * @brief This function returns the value of member accelerometer_integral_dt_
     * @return Value of member accelerometer_integral_dt_
     */
    eProsima_user_DllExport uint32_t accelerometer_integral_dt_() const;

    /*!
     * @brief This function returns a reference to member accelerometer_integral_dt_
     * @return Reference to member accelerometer_integral_dt_
     */
    eProsima_user_DllExport uint32_t& accelerometer_integral_dt_();

    /*!
     * @brief This function sets a value in member accelerometer_clipping_
     * @param _accelerometer_clipping_ New value for member accelerometer_clipping_
     */
    eProsima_user_DllExport void accelerometer_clipping_(uint8_t _accelerometer_clipping_);

    /*!
     * @brief This function returns the value of member accelerometer_clipping_
     * @return Value of member accelerometer_clipping_
     */
    eProsima_user_DllExport uint8_t accelerometer_clipping_() const;

    /*!
     * @brief This function returns a reference to member accelerometer_clipping_
     * @return Reference to member accelerometer_clipping_
     */
    eProsima_user_DllExport uint8_t& accelerometer_clipping_();


    /*!
     * @brief This function returns the maximum serialized size of an object
     * depending on the buffer alignment.
     * @param current_alignment Buffer alignment.
     * @return Maximum serialized size.
     */
    eProsima_user_DllExport static size_t getMaxCdrSerializedSize(size_t current_alignment = 0);

    /*!
     * @brief This function returns the serialized size of a data depending on the buffer alignment.
     * @param data Data which is calculated its serialized size.
     * @param current_alignment Buffer alignment.
     * @return Serialized size.
     */
    eProsima_user_DllExport static size_t getCdrSerializedSize(const sensor_combined& data, size_t current_alignment = 0);


    /*!
     * @brief This function serializes an object using CDR serialization.
     * @param cdr CDR serialization object.
     */
    eProsima_user_DllExport void serialize(eprosima::fastcdr::Cdr &cdr) const;

    /*!
     * @brief This function deserializes an object using CDR serialization.
     * @param cdr CDR serialization object.
     */
    eProsima_user_DllExport void deserialize(eprosima::fastcdr::Cdr &cdr);



    /*!
     * @brief This function returns the maximum serialized size of the Key of an object
     * depending on the buffer alignment.
     * @param current_alignment Buffer alignment.
     * @return Maximum serialized size.
     */
    eProsima_user_DllExport static size_t getKeyMaxCdrSerializedSize(size_t current_alignment = 0);

    /*!
     * @brief This function tells you if the Key has been defined for this type
     */
    eProsima_user_DllExport static bool isKeyDefined();

    /*!
     * @brief This function serializes the key members of an object using CDR serialization.
     * @param cdr CDR serialization object.
     */
    eProsima_user_DllExport void serializeKey(eprosima::fastcdr::Cdr &cdr) const;

private:
    uint64_t m_timestamp_;
    sensor_combined__float_array_3 m_gyro_rad;
    uint32_t m_gyro_integral_dt_;
    int32_t m_accelerometer_timestamp_relative_;
    sensor_combined__float_array_3 m_accelerometer_m_s2;
    uint32_t m_accelerometer_integral_dt_;
    uint8_t m_accelerometer_clipping_;
};

#endif // _SENSOR_COMBINED_H_